package com.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @author : ranzlupup
 * @date : 2023/3/1 16:14
 */
object RDD_Transform_sortBy {
    def main(args: Array[String]): Unit = {
        val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
        val sparkContext: SparkContext = new SparkContext(sparkConf)
        val RDD: RDD[Int] = sparkContext.makeRDD(List(1, 2, 3, 5, 6, 7, 4, 8, 9, 10))
        val RDD1: RDD[Int] = sparkContext.makeRDD(List(1, 2, 4, 5, 6, 7, 3, 8, 9, 10), 2)

        // TODO RDD转换算子
        //      Value类型
        //      sample
        // 该操作用于排序数据。在排序之前，可以将数据通过 f 函数进行处理，之后按照 f 函数处理 的结果进行排序，默认为升序排列。
        // 排序后新产生的 RDD 的分区数与原 RDD 的分区数一 致。中间存在 shuffle 的过程
        RDD.sortBy(num => num, true).collect().foreach(println)
        println("---------------------")
        RDD.sortBy(num => num, false).collect().foreach(println)
        println("---------------------")
        RDD1.glom().map(_.mkString(", ")).collect().foreach(println)
        println("---------------------")
        RDD1.sortBy(num => num, false).glom().map(_.mkString(",")).collect().foreach(println)
        println("---------------------")
        RDD1.sortBy(num => num, true).glom().map(_.mkString(",")).collect().foreach(println)
        sparkContext.stop()
    }
}